package com.spring.util;

import com.jntoo.db.utils.StringUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 * 获取前端提交的参数
 */
public class Request {

    /**
     * 获取HttpServletRequest 类的实体
     * @return
     */
    /**
     * 获取当前请求的 HttpServletRequest 对象
     * @return 当前请求的 HttpServletRequest 对象
     */
    public static HttpServletRequest getRequest() {
        // 通过 RequestContextHolder.getRequestAttributes() 方法获取请求属性
        // 强制转换为 ServletRequestAttributes，然后获取其中的 HttpServletRequest 对象
//        RequestContextHolder: 是一个用于访问当前请求属性的持有者类。它提供了对当前线程的请求属性的访问方式。
//
//        getRequestAttributes(): 是 RequestContextHolder 类的静态方法，用于获取当前线程的请求属性。它返回一个包含当前请求属性的对象。
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    }

    /**
     * 获取HttpServletResponse 类的实体
     * @return
     */
    public static HttpServletResponse getResponse() {
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
    }

    /**
     * 获取参数
     * @param name
     * @return
     */
    public static String get(String name) {
        String[] value = getRequest().getParameterValues(name);//获取请求参数的值数组
        return value == null || value.length == 0 ? "" : StringUtil.join(",", value);
    }

    /**
     * 获取URL 整数参数，默认为0
     * @param name
     * @return
     */
    public static int getInt(String name) {
        String value = get(name, "0");
        return value.equals("") ? 0 : Integer.valueOf(value).intValue();
    }

    /**
     * 获取URL 整数参数，默认为0
     * @param name
     * @param def 默认值
     * @return
     */
    public static int getInt(String name, int def) {
        String value = get(name, String.valueOf(def));
        return value.equals("") ? def : Integer.valueOf(value).intValue();
    }

    /**
     * 获取URL 浮点数参数
     * @param name
     * @return
     */
    public static double getDouble(String name) {
        String value = get(name, "0");
        return value.equals("") ? 0.0f : Double.valueOf(value).doubleValue();
    }

    /**
     * 获取URL 浮点数参数
     * @param name
     * @param def 默认值
     * @return
     */
    public static double getDouble(String name, double def) {
        String value = get(name, String.valueOf(def));
        return value.equals("") ? 0.0f : Double.valueOf(value).doubleValue();
    }

    /**
     * 获取Url 字符串参数
     * @param name
     * @param def 默认值
     * @return
     */
    public static String get(String name, String def) {
        if (def == null) {
            def = "";
        }
        String[] value = getRequest().getParameterValues(name);
        return value == null || value.length == 0 ? def : StringUtil.join(",", value);
    }
}
